package co.edu.usbcali.csru.presentation.backingBeans;

import co.edu.usbcali.csru.exceptions.*;
import co.edu.usbcali.csru.modelo.*;
import co.edu.usbcali.csru.modelo.dto.AutorizacionDTO;
import co.edu.usbcali.csru.presentation.businessDelegate.BusinessDelegatorView;
import co.edu.usbcali.csru.utilities.*;

import com.icesoft.faces.async.render.RenderManager;
import com.icesoft.faces.async.render.Renderable;
import com.icesoft.faces.component.ext.HtmlCommandButton;
import com.icesoft.faces.component.ext.HtmlInputText;
import com.icesoft.faces.component.ext.HtmlInputTextarea;
import com.icesoft.faces.component.ext.HtmlOutputText;
import com.icesoft.faces.component.ext.HtmlSelectOneRadio;
import com.icesoft.faces.component.selectinputdate.SelectInputDate;
import com.icesoft.faces.context.DisposableBean;
import com.icesoft.faces.webapp.xmlhttp.FatalRenderingException;
import com.icesoft.faces.webapp.xmlhttp.PersistentFacesState;
import com.icesoft.faces.webapp.xmlhttp.RenderingException;
import com.icesoft.faces.webapp.xmlhttp.TransientRenderingException;

import java.nio.charset.CodingErrorAction;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;

import javax.faces.event.ActionEvent;
import javax.faces.event.ValueChangeEvent;
import javax.faces.model.DataModel;


/**
*
*
* @author Zathura Code Generator http://code.google.com/p/zathura
*
*/
public class AutorizacionView extends DataSource implements Renderable,
    DisposableBean {
    private HtmlInputText txtAutCedVisitante;
    //private HtmlInputText txtAutDescripcionActi;
    //private HtmlInputText txtAutDescripcionPermi;
    private HtmlInputText txtAutEmpresa;
    private HtmlInputText txtAutNombreVisitante;
    private HtmlInputText txtEstCodigo_Estado;
    private HtmlInputText txtPriCodigo_PropietarioInmueble;
    private HtmlInputText txtAutCodigo;
    private SelectInputDate txtAutFecha;
    private HtmlCommandButton btnSave;
    private HtmlCommandButton btnModify;
    private HtmlCommandButton btnDelete;
    private HtmlCommandButton btnClear;
    private HtmlCommandButton btnSearch;
    private boolean renderDataTable;
    private boolean flag = true;
    private RenderManager renderManager;
    private PersistentFacesState state = PersistentFacesState.getInstance();
    private List<Autorizacion> autorizacion;
    private List<AutorizacionDTO> autorizacionDTO;
    private HtmlInputTextarea txtAreaDescripcionActi;
	private HtmlInputTextarea txtAreaDescripcionPermi;
	private Date fechaActual = new Date();
    private List<Autorizacion> autorizacionEncontradas;
	private HtmlInputText txtCodigoConsulta;
	private HtmlOutputText cmlAutorizacion;
	private HtmlCommandButton btnLupa;
	private HtmlSelectOneRadio radioSelecionado;
	private HtmlInputText txtNombreConsulta;
	private Boolean popupVisible;
	private String seleccionado="0";
	private boolean activado=false;
	
	public AutorizacionView() {
		super("");
        String login = (String) FacesUtils.getSession().getAttribute("Login");
		String password = (String) FacesUtils.getSession().getAttribute("Password");
		String codigoTipoUsuario = "";
		
	    try {
	    	Usuario u = obtenerUsuario(login, password);
	    	codigoTipoUsuario = u.getTipoUsuario().getTpuCodigo();
	    	System.out.println("CODIGOTIPOUSAURIO"+codigoTipoUsuario);
	    } catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
			e.printStackTrace();
		}
	  
    }
	
	public String action_volver(){
		
		String tipoUsuario = (String) FacesUtils.getSession().getAttribute("TipoUsuario");

		if (tipoUsuario.equals("PROPIETARIO")) {
			return "goMenuPropietario";
		}else if (tipoUsuario.equals("ARRENDATARIO")) {
			return "goMenuArrendatario";
		}else{
			return "";
		}
	}
	
	private Usuario obtenerUsuario(String login,String password)throws Exception{
		Usuario entity = null;
		
		List<Usuario> usuariosConsultados = BusinessDelegatorView.getUsuarioParametro(login, password);
		if (Utilities.validationsList(usuariosConsultados)) {
			entity = usuariosConsultados.get(0);
		}
		return entity;
	}
    
    
	public boolean revisarCampos() {
		
		/*SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
		String fecha = txtAutFecha.getValue().toString();
		Date fecha2 = null;
		try {
		fecha2 = formato.parse(fecha);
		} catch (Exception e) {
            FacesUtils.addErrorMessage(e.getMessage());
        }		
		
		if (!Utilities.formatDateWithoutTimeInAStringForBetweenWhere2(fecha2)) {
			FacesUtils.addErrorMessage("No es un formato de fecha valida (dd/MM/yyyy)");
			return false;
		}
		*/
		//System.out.println("XXXXX"+txtAutFecha.getValue().toString());
		

		
		
		if (txtAutFecha.getValue()==null
				|| txtAutCedVisitante.getValue().toString().equals("")
				|| txtAutNombreVisitante.getValue().toString().equals("")) {
			FacesUtils
					.addErrorMessage("Se deben llenar todos los campos con obligatorios.");
			return false;
		}
		
		
		
		SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");
		String fechaAut = formato.format(txtAutFecha.getValue());
		
		System.out.println("FECHAAAA:" + fechaAut);
		
		
		if(Utilities.strToDate(fechaAut, "dd/MM/yyyy")==null) {
			FacesUtils.addErrorMessage("La fecha no es correcta.");
		}

		if (!Utilities.isNumeric(txtAutCedVisitante.getValue().toString())) {
			FacesUtils.addErrorMessage("La cedula debe ser numerico.");
			return false;
		}

		if (!Utilities.isOnlyLetters2(txtAutNombreVisitante.getValue()
				.toString())) {
			FacesUtils
					.addErrorMessage("El nombre del visitante debe contener solo letras.");
			return false;
		}
		
		
		System.out.println(fechaActual);

		return true;
	}


    public String action_clear() {
    	
    	
        String login = (String) FacesUtils.getSession().getAttribute("Login");
		String password = (String) FacesUtils.getSession().getAttribute("Password");
		String codigoTipoUsuario = "";
		
	    try {
	    	Usuario u = BusinessDelegatorView.getUsuarioParametro(login, password).get(0);
	    	codigoTipoUsuario = u.getTipoUsuario().getTpuCodigo();
	    	System.out.println("CODIGOTIPOUSAURIO"+codigoTipoUsuario);
	    } catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
			e.printStackTrace();
		}
	    
	    if(codigoTipoUsuario.equals("5") || codigoTipoUsuario.equals("3")){
        txtAutCedVisitante.setValue(null);
        txtAutCedVisitante.setDisabled(false);
        txtAreaDescripcionActi.setValue(null);
        txtAreaDescripcionActi.setDisabled(true);
        txtAreaDescripcionPermi.setValue(null);
        txtAreaDescripcionPermi.setDisabled(true);
        txtAutEmpresa.setValue(null);
        txtAutEmpresa.setDisabled(true);
        txtAutNombreVisitante.setValue(null);
        txtAutNombreVisitante.setDisabled(true);
        txtEstCodigo_Estado.setValue(null);
        txtEstCodigo_Estado.setDisabled(true);
        txtPriCodigo_PropietarioInmueble.setValue(null);
        txtPriCodigo_PropietarioInmueble.setDisabled(true);
        txtAutFecha.setValue(null);
        txtAutFecha.setDisabled(true);
        txtAutCodigo.setValue(null);
        txtAutCodigo.setDisabled(true);
        btnClear.setDisabled(false);
	    }
	    
	    if(codigoTipoUsuario.equals("3")){
	        btnSave.setDisabled(true);
	        btnDelete.setDisabled(true);
	        btnModify.setDisabled(true);
	    }
        return "";
    }
    
    
    
    
    

    public void listener_txtId(ValueChangeEvent event) {
        if ((event.getNewValue() != null) && !event.getNewValue().equals("")) {
            Autorizacion entity = null;
            String codInmueble="";
    		
			
            String login = (String) FacesUtils.getSession().getAttribute("Login");
			String password = (String) FacesUtils.getSession().getAttribute("Password");
			
    	    try {
    	    	Usuario u = BusinessDelegatorView.getUsuarioParametro(login, password).get(0);
    			codInmueble= action_darCodigo(u.getPersona().getPerCedula());
    		} catch (Exception e) {
    			FacesUtils.addErrorMessage(e.getMessage());
    			e.printStackTrace();
    		}
    		

        	FacesUtils.getSession().setAttribute("codInmu", codInmueble);
        	
        	System.out.println("CODIGO INMUEBLE"+codInmueble);
     /*     try {
                String autCodigo = new String(txtAutCodigo.getValue().toString());
                entity = BusinessDelegatorView.getAutorizacion(autCodigo);
                System.out.println("xxxxx"+entity);
            } catch (Exception e) {
                // TODO: handle exception
            }
            
            */

            if (entity == null) {
                txtAutCedVisitante.setDisabled(false);
                txtAreaDescripcionActi.setDisabled(false);
                txtAreaDescripcionPermi.setDisabled(false);
                txtAutEmpresa.setDisabled(false);
                txtAutNombreVisitante.setDisabled(false);
                txtEstCodigo_Estado.setDisabled(true);
                txtPriCodigo_PropietarioInmueble.setDisabled(true);
				txtPriCodigo_PropietarioInmueble.setValue(FacesUtils.getSession().getAttribute("codInmu"));
                txtAutFecha.setDisabled(false);
                txtEstCodigo_Estado.setValue("Activa");
                txtAutCodigo.setDisabled(true);
                btnSave.setDisabled(false);
                btnDelete.setDisabled(true);
                btnModify.setDisabled(true);
                btnClear.setDisabled(false);
                //btnSearch.setDisabled(false);
            } 
        }
    }

    public String action_save() {
    	
    	if(!revisarCampos()){
    		return "";
    	}
    	
        try {
        	String cedulaVisitante = txtAutCedVisitante.getValue().toString();
        	String areaDescripcionActi = txtAreaDescripcionActi.getValue().toString();
        	String areaDescripcionPermi = txtAreaDescripcionPermi.getValue().toString();
        	String empresa = txtAutEmpresa.getValue().toString().toUpperCase();
        	Date fecha = (Date)txtAutFecha.getValue();
        	String nombreVisitante = txtAutNombreVisitante.getValue().toString().toUpperCase();
        	String estado = "1";
        	String propInmueble = txtPriCodigo_PropietarioInmueble.getValue().toString();
        	
        	if(fechaActual.before((Date)txtAutFecha.getValue())){
			BusinessDelegatorView.saveAutorizacion(cedulaVisitante, null,
					areaDescripcionActi, areaDescripcionPermi, empresa, fecha,
					nombreVisitante, estado, propInmueble);
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYSAVED);
			getData();
			renderManager.getOnDemandRenderer("AutorizacionView").requestRender();
			action_clear();
		} 
        	if(fechaActual.after((Date)txtAutFecha.getValue())){
				System.out.println("no se puede seleccionar una fecha anterior a la actual");
				FacesUtils.addErrorMessage("No puede seleccionar una fecha anterior a la actual");
			}
        	
        }	catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

    public String action_modify() {
    	if(!revisarCampos()){
    		return "";
    	}  	
        try {
        	String codigoAutorizacion = txtAutCodigo.getValue().toString();
        	String cedulaVisitante = txtAutCedVisitante.getValue().toString();
        	String areaDescripcionActi = txtAreaDescripcionActi.getValue().toString();
        	String areaDescripcionPermi = txtAreaDescripcionPermi.getValue().toString();
        	String empresa = txtAutEmpresa.getValue().toString().toUpperCase();
        	Date fecha = (Date)txtAutFecha.getValue();
        	String nombreVisitante = txtAutNombreVisitante.getValue().toString().toUpperCase();
        	String estado = "1";
        	String propInmueble = txtPriCodigo_PropietarioInmueble.getValue().toString();
        	
        	if(fechaActual.before((Date)txtAutFecha.getValue())){
			BusinessDelegatorView.updateAutorizacion(cedulaVisitante, codigoAutorizacion,
					areaDescripcionActi, areaDescripcionPermi, empresa, fecha,
					nombreVisitante, estado, propInmueble);
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYSAVED);
			getData();
			renderManager.getOnDemandRenderer("AutorizacionView").requestRender();
			action_clear();
		} 
        	if(fechaActual.after((Date)txtAutFecha.getValue())){
				System.out.println("no se puede seleccionar una fecha anterior a la actual");
				FacesUtils.addErrorMessage("No puede seleccionar una fecha anterior a la actual");
			}
        	
        }	catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
    }
    
    

    
	public String action_cambiarEstado() {


		if (!revisarCampos()) {
			return "";
		}
		

		try {
			
			String codigoEstado = "";
			String autCodigo = txtAutCodigo.getValue().toString();
			Autorizacion a = BusinessDelegatorView.getAutorizacion(autCodigo);
			if (a.getEstado().getEstCodigo().equals("1")) {
				codigoEstado = "2";
			}
			if (a.getEstado().getEstCodigo().equals("2")) {
				codigoEstado = "1";
			}
			
			BusinessDelegatorView.updateAutorizacion (a.getAutCedVisitante(), a
					.getAutCodigo(), a.getAutDescripcionActi(), a
					.getAutDescripcionPermi(), a.getAutEmpresa(), a
					.getAutFecha(), a.getAutNombreVisitante(), codigoEstado,
					FacesUtils.checkString(txtPriCodigo_PropietarioInmueble));
			FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYSAVED);
			onePageDataModel=null;
			renderManager.getOnDemandRenderer("AutorizacionView").requestRender();
			action_clear();
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
		}

		return "";
	}

    
    public String action_modifyWitDTO(String autCedVisitante, String autCodigo,
        String autDescripcionActi, String autDescripcionPermi,
        String autEmpresa, Date autFecha, String autNombreVisitante,
        String estCodigo_Estado, String priCodigo_PropietarioInmueble)
        throws Exception {
        try {
            BusinessDelegatorView.updateAutorizacion(autCedVisitante,
                autCodigo, autDescripcionActi, autDescripcionPermi, autEmpresa,
                autFecha, autNombreVisitante, estCodigo_Estado,
                priCodigo_PropietarioInmueble);
            renderManager.getOnDemandRenderer("AutorizacionView").requestRender();
            FacesUtils.addInfoMessage(ZMessManager.ENTITY_SUCCESFULLYMODIFIED);
        } catch (Exception e) {
            //renderManager.getOnDemandRenderer("AutorizacionView").requestRender();
            FacesUtils.addErrorMessage(e.getMessage());
            throw e;
        }

        return "";
    }

    public List<Autorizacion> getAutorizacion() {
        if (flag) {
            try {
                autorizacion = BusinessDelegatorView.getAutorizacion();
                flag = false;
            } catch (Exception e) {
                flag = true;
                FacesUtils.addErrorMessage(e.getMessage());
            }
        }

        return autorizacion;
    }

    public boolean isFlag() {
        return flag;
    }

    public void setAutorizacion(List<Autorizacion> autorizacion) {
        this.autorizacion = autorizacion;
    }

    public boolean isRenderDataTable() {
        try {
            if (flag) {
                if (BusinessDelegatorView.findTotalNumberAutorizacion() > 0) {
                    renderDataTable = true;
                } else {
                    renderDataTable = false;
                }
            }

            flag = false;
        } catch (Exception e) {
            renderDataTable = false;
            e.printStackTrace();
        }

        return renderDataTable;
    }

    public DataModel getData() {
        state = PersistentFacesState.getInstance();

        if (onePageDataModel == null) {
            onePageDataModel = new LocalDataModel(pageSize);
        }

        return onePageDataModel;
    }

    /**
    * This is where the Object data is retrieved from the database and
    * returned as a list of objects for display in the UI.
    */
    private DataPage<Autorizacion> getDataPage(int startRow, int pageSize) {
        // Retrieve the total number of objects from the database.  This
        // number is required by the DataPage object so the paginator will know
        // the relative location of the page data.
        int totalNumberAutorizacion = 0;

        try {
            totalNumberAutorizacion = BusinessDelegatorView.findTotalNumberAutorizacion()
                                                           .intValue();
        } catch (Exception e) {
            FacesUtils.addErrorMessage(e.getMessage());
        }

        // Calculate indices to be displayed in the ui.
        int endIndex = startRow + pageSize;

        if (endIndex > totalNumberAutorizacion) {
            endIndex = totalNumberAutorizacion;
        }

        try {
            autorizacion = BusinessDelegatorView.findPageAutorizacion(sortColumnName,
                    sortAscending, startRow, endIndex - startRow);

            // Remove this Renderable from the existing render groups.
            //leaveRenderGroups();        			
        } catch (Exception e) {
            FacesUtils.addErrorMessage(e.getMessage());
        }

        // Add this Renderable to the new render groups.
        //joinRenderGroups();
        // Reset the dirtyData flag.
        onePageDataModel.setDirtyData(false);
        // This is required when using Hibernate.  If the SessionManager is not
        // cleared or closed objects are cached and stale objects will show up
        // in the table.
        // This way, the detached objects are reread from the database.
        // This call is not required with Hibernate, which uses a Query Hint
        // to clear the l2 cache in the DAO.
        flag = true;

        return new DataPage<Autorizacion>(totalNumberAutorizacion, startRow,
            autorizacion);
    }

    public DataModel getDataDTO() {
        state = PersistentFacesState.getInstance();

        if (onePageDataModel == null) {
            onePageDataModel = new LocalDataModelDTO(pageSize);
        }

        return onePageDataModel;
    }

    /**
    * This is where the Object data is retrieved from the database and
    * returned as a list of objects for display in the UI.
    */
    private DataPage<AutorizacionDTO> getDataPageDTO(int startRow, int pageSize) {
        // Retrieve the total number of objects from the database.  This
        // number is required by the DataPage object so the paginator will know
        // the relative location of the page data.
        int totalNumberAutorizacion = 0;

        try {
            totalNumberAutorizacion = BusinessDelegatorView.findTotalNumberAutorizacion()
                                                           .intValue();
        } catch (Exception e) {
            FacesUtils.addErrorMessage(e.getMessage());
        }

        // Calculate indices to be displayed in the ui.
        int endIndex = startRow + pageSize;

        if (endIndex > totalNumberAutorizacion) {
            endIndex = totalNumberAutorizacion;
        }

        try {
            autorizacion = BusinessDelegatorView.findPageAutorizacion(sortColumnName,
                    sortAscending, startRow, endIndex - startRow);

            if (Utilities.validationsList(autorizacion)) {
                autorizacionDTO = new ArrayList<AutorizacionDTO>();

                for (Autorizacion autorizacionTmp : autorizacion) {
                    AutorizacionDTO autorizacionDTO2 = new AutorizacionDTO();
                    autorizacionDTO2.setAutCodigo(autorizacionTmp.getAutCodigo()
                                                                 .toString());
                    autorizacionDTO2.setAutCedVisitante((autorizacionTmp.getAutCedVisitante() != null)
                        ? autorizacionTmp.getAutCedVisitante().toString() : null);
                    autorizacionDTO2.setAutDescripcionActi((autorizacionTmp.getAutDescripcionActi() != null)
                        ? autorizacionTmp.getAutDescripcionActi().toString()
                        : null);
                    autorizacionDTO2.setAutDescripcionPermi((autorizacionTmp.getAutDescripcionPermi() != null)
                        ? autorizacionTmp.getAutDescripcionPermi().toString()
                        : null);
                    autorizacionDTO2.setAutEmpresa((autorizacionTmp.getAutEmpresa() != null)
                        ? autorizacionTmp.getAutEmpresa().toString() : null);
                    autorizacionDTO2.setAutFecha(autorizacionTmp.getAutFecha());
                    autorizacionDTO2.setAutNombreVisitante((autorizacionTmp.getAutNombreVisitante() != null)
                        ? autorizacionTmp.getAutNombreVisitante().toString()
                        : null);
                    autorizacionDTO2.setEstCodigo_Estado((autorizacionTmp.getEstado()
                                                                         .getEstCodigo() != null)
                        ? autorizacionTmp.getEstado().getEstCodigo().toString()
                        : null);
                    autorizacionDTO2.setPriCodigo_PropietarioInmueble((autorizacionTmp.getPropietarioInmueble()
                                                                                      .getPriCodigo() != null)
                        ? autorizacionTmp.getPropietarioInmueble().getPriCodigo()
                                         .toString() : null);
                    autorizacionDTO2.setAutorizacion(autorizacionTmp);
                    autorizacionDTO2.setAutorizacionView(this);
                    autorizacionDTO.add(autorizacionDTO2);
                }
            }

            // Remove this Renderable from the existing render groups.
            leaveRenderGroups();
        } catch (Exception e) {
            FacesUtils.addErrorMessage(e.getMessage());
        }

        // Add this Renderable to the new render groups.
        joinRenderGroups();
        // Reset the dirtyData flag.
        onePageDataModel.setDirtyData(false);
        // This is required when using Hibernate.  If the SessionManager is not
        // cleared or closed objects are cached and stale objects will show up
        // in the table.
        // This way, the detached objects are reread from the database.
        // This call is not required with Hibernate, which uses a Query Hint
        // to clear the l2 cache in the DAO.
        flag = true;

        return new DataPage<AutorizacionDTO>(totalNumberAutorizacion, startRow,
            autorizacionDTO);
    }

    protected boolean isDefaultAscending(String sortColumn) {
        return true;
    }

    /**
    * This method is called when a render call is made from the server. Render
    * calls are only made to views containing an updated record. The data is
    * marked as dirty to trigger a fetch of the updated record from the
    * database before rendering takes place.
    */
    public PersistentFacesState getState() {
        onePageDataModel.setDirtyData();

        return state;
    }

    /**
    * This method is called from faces-config.xml with each new session.
    */
    public void setRenderManager(RenderManager renderManager) {
        this.renderManager = renderManager;
    }

    public void renderingException(RenderingException arg0) {
        if (arg0 instanceof TransientRenderingException) {
        } else if (arg0 instanceof FatalRenderingException) {
            // Remove from existing Customer render groups.
            leaveRenderGroups();
        }
    }

    /**
    * Remove this Renderable from existing uiCustomerBeans render groups.
    * OnDemandRenderers are named/created using the underlying Customer Number.
    */
    private void leaveRenderGroups() {
        if (Utilities.validationsList(autorizacionDTO)) {
            for (AutorizacionDTO autorizacionTmp : autorizacionDTO) {
                renderManager.getOnDemandRenderer("AutorizacionView")
                             .remove(this);
            }
        }
    }

    /**
    * Add this Renderable to the new uiCustomerBeans render groups.
    * OnDemandRenderers are named/created using the underlying Customer Number.
    */
    private void joinRenderGroups() {
        if (Utilities.validationsList(autorizacionDTO)) {
            for (AutorizacionDTO autorizacionTmp : autorizacionDTO) {
                renderManager.getOnDemandRenderer("AutorizacionView").add(this);
            }
        }
    }

    public void dispose() throws Exception {
    }

    public RenderManager getRenderManager() {
        return renderManager;
    }

    public void setState(PersistentFacesState state) {
        this.state = state;
    }

    public HtmlInputText getTxtAutCedVisitante() {
        return txtAutCedVisitante;
    }

    public void setTxtAutCedVisitante(HtmlInputText txtAutCedVisitante) {
        this.txtAutCedVisitante = txtAutCedVisitante;
    }

    /* public HtmlInputText getTxtAutDescripcionActi() {
        return txtAutDescripcionActi;
    }

    public void setTxtAutDescripcionActi(HtmlInputText txtAutDescripcionActi) {
        this.txtAutDescripcionActi = txtAutDescripcionActi;
    }

    public HtmlInputText getTxtAutDescripcionPermi() {
        return txtAutDescripcionPermi;
    }

    public void setTxtAutDescripcionPermi(HtmlInputText txtAutDescripcionPermi) {
        this.txtAutDescripcionPermi = txtAutDescripcionPermi;
    } */

    public HtmlInputText getTxtAutEmpresa() {
        return txtAutEmpresa;
    }

    public void setTxtAutEmpresa(HtmlInputText txtAutEmpresa) {
        this.txtAutEmpresa = txtAutEmpresa;
    }

    public HtmlInputText getTxtAutNombreVisitante() {
        return txtAutNombreVisitante;
    }

    public void setTxtAutNombreVisitante(HtmlInputText txtAutNombreVisitante) {
        this.txtAutNombreVisitante = txtAutNombreVisitante;
    }

    public HtmlInputText getTxtEstCodigo_Estado() {
        return txtEstCodigo_Estado;
    }

    public void setTxtEstCodigo_Estado(HtmlInputText txtEstCodigo_Estado) {
        this.txtEstCodigo_Estado = txtEstCodigo_Estado;
    }

    public HtmlInputText getTxtPriCodigo_PropietarioInmueble() {
        return txtPriCodigo_PropietarioInmueble;
    }

    public void setTxtPriCodigo_PropietarioInmueble(
        HtmlInputText txtPriCodigo_PropietarioInmueble) {
        this.txtPriCodigo_PropietarioInmueble = txtPriCodigo_PropietarioInmueble;
    }

    public SelectInputDate getTxtAutFecha() {
        return txtAutFecha;
    }

    public void setTxtAutFecha(SelectInputDate txtAutFecha) {
        this.txtAutFecha = txtAutFecha;
    }

    public HtmlInputText getTxtAutCodigo() {
        return txtAutCodigo;
    }

    public void setTxtAutCodigo(HtmlInputText txtAutCodigo) {
        this.txtAutCodigo = txtAutCodigo;
    }

    public HtmlCommandButton getBtnSave() {
        return btnSave;
    }

    public void setBtnSave(HtmlCommandButton btnSave) {
        this.btnSave = btnSave;
    }

    public HtmlCommandButton getBtnModify() {
        return btnModify;
    }

    public void setBtnModify(HtmlCommandButton btnModify) {
        this.btnModify = btnModify;
    }

    public HtmlCommandButton getBtnDelete() {
        return btnDelete;
    }

    public void setBtnDelete(HtmlCommandButton btnDelete) {
        this.btnDelete = btnDelete;
    }

    public HtmlCommandButton getBtnClear() {
        return btnClear;
    }

    public void setBtnClear(HtmlCommandButton btnClear) {
        this.btnClear = btnClear;
    }

    public void setRenderDataTable(boolean renderDataTable) {
        this.renderDataTable = renderDataTable;
    }

    public void setFlag(boolean flag) {
        this.flag = flag;
    }

    public List<AutorizacionDTO> getAutorizacionDTO() {
        return autorizacionDTO;
    }

    public void setAutorizacionDTO(List<AutorizacionDTO> autorizacionDTO) {
        this.autorizacionDTO = autorizacionDTO;
    }

    public TimeZone getTimeZone() {
        return java.util.TimeZone.getDefault();
    }
    
    

    public HtmlCommandButton getBtnLupa() {
		return btnLupa;
	}


	public void setBtnLupa(HtmlCommandButton btnLupa) {
		this.btnLupa = btnLupa;
	}
	
	
	public HtmlCommandButton getBtnSearch() {
		return btnSearch;
	}


	public void setBtnSearch(HtmlCommandButton btnSearch) {
		this.btnSearch = btnSearch;
	}
	
	public String getSeleccionado() {
		return seleccionado;
	}


	public void setSeleccionado(String seleccionado) {
		this.seleccionado = seleccionado;
	}





	/**
    * A special type of JSF DataModel to allow a datatable and datapaginator
    * to page through a large set of data without having to hold the entire
    * set of data in memory at once.
    * Any time a managed bean wants to avoid holding an entire dataset,
    * the managed bean declares this inner class which extends PagedListDataModel
    * and implements the fetchData method. fetchData is called
    * as needed when the table requires data that isn't available in the
    * current data page held by this object.
    * This requires the managed bean (and in general the business
    * method that the managed bean uses) to provide the data wrapped in
    * a DataPage object that provides info on the full size of the dataset.
    */
    private class LocalDataModel extends PagedListDataModel {
        public LocalDataModel(int pageSize) {
            super(pageSize);
        }

        public DataPage<Autorizacion> fetchPage(int startRow, int pageSize) {
            // call enclosing managed bean method to fetch the data
            return getDataPage(startRow, pageSize);
        }
    }

    private class LocalDataModelDTO extends PagedListDataModel {
        public LocalDataModelDTO(int pageSize) {
            super(pageSize);
        }

        public DataPage<AutorizacionDTO> fetchPage(int startRow, int pageSize) {
            // call enclosing managed bean method to fetch the data
            return getDataPageDTO(startRow, pageSize);
        }
    }

	public HtmlInputTextarea getTxtAreaDescripcionActi() {
		return txtAreaDescripcionActi;
	}


	public void setTxtAreaDescripcionActi(HtmlInputTextarea txtAreaDescripcionActi) {
		this.txtAreaDescripcionActi = txtAreaDescripcionActi;
	}


	public HtmlInputTextarea getTxtAreaDescripcionPermi() {
		return txtAreaDescripcionPermi;
	}


	public void setTxtAreaDescripcionPermi(HtmlInputTextarea txtAreaDescripcionPermi) {
		this.txtAreaDescripcionPermi = txtAreaDescripcionPermi;
	}


	public Date getFechaActual() {
		return fechaActual;
	}


	public void setFechaActual(Date fechaActual) {
		this.fechaActual = fechaActual;
	}


	public List<Autorizacion> getAutorizacionEncontradas() {
		return autorizacionEncontradas;
	}


	public void setAutorizacionEncontradas(
			List<Autorizacion> autorizacionEncontradas) {
		this.autorizacionEncontradas = autorizacionEncontradas;
	}


	public HtmlInputText getTxtCodigoConsulta() {
		return txtCodigoConsulta;
	}


	public void setTxtCodigoConsulta(HtmlInputText txtCodigoConsulta) {
		this.txtCodigoConsulta = txtCodigoConsulta;
	}
	
	
    
	public HtmlInputText getTxtNombreConsulta() {
		return txtNombreConsulta;
	}


	public void setTxtNombreConsulta(HtmlInputText txtNombreConsulta) {
		this.txtNombreConsulta = txtNombreConsulta;
	}
	
	public HtmlOutputText getCmlAutorizacion() {
		return cmlAutorizacion;
	}


	public void setCmlAutorizacion(HtmlOutputText cmlAutorizacion) {
		this.cmlAutorizacion = cmlAutorizacion;
	}


	public String action_darCodigo(String usuCedula) throws Exception {
		String codigo="";
		try {						
			codigo = BusinessDelegatorView.obtenerCodigoPropietarioInmueble(usuCedula);			
		} catch (Exception e) {
			throw e;
		}
		return codigo;
	}

	public HtmlSelectOneRadio getRadioSelecionado() {
		return radioSelecionado;
	}

	public void setRadioSelecionado(HtmlSelectOneRadio radioSelecionado) {
		this.radioSelecionado = radioSelecionado;
	}

	public Boolean getPopupVisible() {
		return popupVisible;
	}

	public void setPopupVisible(Boolean popupVisible) {
		this.popupVisible = popupVisible;
	}
	
	public boolean isActivado() {
		return activado;
	}


	public void setActivado(boolean activado) {
		this.activado = activado;
	}


	public String action_cargar() {

		String login = (String) FacesUtils.getSession().getAttribute("Login");
		String password = (String) FacesUtils.getSession().getAttribute(
				"Password");
		String codigoTipoUsuario = "";

		// popupVisible = true;

		Autorizacion entity = null;
		try {
			String codigoAutorizacion = new String(cmlAutorizacion.getValue()
					.toString());
			entity = BusinessDelegatorView.getAutorizacion(codigoAutorizacion);
			Usuario u = BusinessDelegatorView.getUsuarioParametro(login,
					password).get(0);
			codigoTipoUsuario = u.getTipoUsuario().getTpuCodigo();
			System.out.println("CODIGOTIPOUSAURIO" + codigoTipoUsuario);
		} catch (Exception e) {
			FacesUtils.addErrorMessage(e.getMessage());
			e.printStackTrace();
		}

		if (entity == null) {
			if (codigoTipoUsuario.equals("5") ) {
				txtAutCedVisitante.setDisabled(true);
				txtAreaDescripcionActi.setDisabled(true);
				txtAreaDescripcionPermi.setDisabled(true);
				txtAutEmpresa.setDisabled(true);
				txtAutNombreVisitante.setDisabled(true);
				txtEstCodigo_Estado.setDisabled(true);
				txtPriCodigo_PropietarioInmueble.setDisabled(true);
				// txtPriCodigo_PropietarioInmueble.setValue(FacesUtils.getSession().getAttribute("codInmu"));
				txtAutFecha.setDisabled(true);
				txtEstCodigo_Estado.setValue("");
				txtAutCodigo.setDisabled(true);
				btnClear.setDisabled(false);
			}
			
			if (codigoTipoUsuario.equals("3")) {
				txtAutCedVisitante.setDisabled(false);
				txtAreaDescripcionActi.setDisabled(false);
				txtAreaDescripcionPermi.setDisabled(false);
				txtAutEmpresa.setDisabled(false);
				txtAutNombreVisitante.setDisabled(false);
				txtEstCodigo_Estado.setDisabled(true);
				txtPriCodigo_PropietarioInmueble.setDisabled(true);
				// txtPriCodigo_PropietarioInmueble.setValue(FacesUtils.getSession().getAttribute("codInmu"));
				txtAutFecha.setDisabled(false);
				txtEstCodigo_Estado.setValue("");
				txtAutCodigo.setDisabled(true);
				btnClear.setDisabled(false);
				btnSave.setDisabled(false);
				btnDelete.setDisabled(true);
				btnModify.setDisabled(true);
			}

		} else {
			if (codigoTipoUsuario.equals("5")) {
				txtAutCedVisitante.setValue(entity.getAutCedVisitante());
				txtAutCedVisitante.setDisabled(true);
				txtAreaDescripcionActi.setValue(entity.getAutDescripcionActi());
				txtAreaDescripcionActi.setDisabled(true);
				txtAreaDescripcionPermi.setValue(entity
						.getAutDescripcionPermi());
				txtAreaDescripcionPermi.setDisabled(true);
				txtAutEmpresa.setValue(entity.getAutEmpresa());
				txtAutEmpresa.setDisabled(true);
				txtAutFecha.setValue(entity.getAutFecha());
				txtAutFecha.setDisabled(true);
				txtAutNombreVisitante.setValue(entity.getAutNombreVisitante());
				txtAutNombreVisitante.setDisabled(true);
				// txtEstCodigo_Estado.setValue("Activa");
				txtEstCodigo_Estado.setDisabled(true);
				txtPriCodigo_PropietarioInmueble.setValue(entity
						.getPropietarioInmueble().getPriCodigo());

				if (entity.getEstado().getEstCodigo().equals("1")) {
					txtEstCodigo_Estado.setValue("ACTIVA");
				} else {
					txtEstCodigo_Estado.setValue("INACTIVA");
				}

				txtPriCodigo_PropietarioInmueble.setDisabled(true);
				txtAutCodigo.setValue(entity.getAutCodigo());
				txtAutCodigo.setDisabled(true);
				btnClear.setDisabled(false);
			}

			if (codigoTipoUsuario.equals("3")) {
				txtAutCedVisitante.setValue(entity.getAutCedVisitante());
				txtAutCedVisitante.setDisabled(false);
				txtAreaDescripcionActi.setValue(entity.getAutDescripcionActi());
				txtAreaDescripcionActi.setDisabled(false);
				txtAreaDescripcionPermi.setValue(entity
						.getAutDescripcionPermi());
				txtAreaDescripcionPermi.setDisabled(false);
				txtAutEmpresa.setValue(entity.getAutEmpresa());
				txtAutEmpresa.setDisabled(false);
				txtAutFecha.setValue(entity.getAutFecha());
				txtAutFecha.setDisabled(false);
				txtAutNombreVisitante.setValue(entity.getAutNombreVisitante());
				txtAutNombreVisitante.setDisabled(false);
				// txtEstCodigo_Estado.setValue("Activa");
				txtEstCodigo_Estado.setDisabled(true);
				txtPriCodigo_PropietarioInmueble.setValue(entity
						.getPropietarioInmueble().getPriCodigo());

				if (entity.getEstado().getEstCodigo().equals("1")) {
					txtEstCodigo_Estado.setValue("ACTIVA");
				} else {
					txtEstCodigo_Estado.setValue("INACTIVA");
				}

				txtPriCodigo_PropietarioInmueble.setDisabled(true);
				txtAutCodigo.setValue(entity.getAutCodigo());
				txtAutCodigo.setDisabled(true);
				btnClear.setDisabled(false);
				btnSave.setDisabled(true);
				btnDelete.setDisabled(false);
				btnModify.setDisabled(false);
			}
		}
		return "";
	}

	public void action_buscarPorNombre(ActionEvent e) {
		
		  String codInmueble="";
		  String txtNombCon = txtNombreConsulta.getValue().toString().toUpperCase();
          String login = (String) FacesUtils.getSession().getAttribute("Login");
			String password = (String) FacesUtils.getSession().getAttribute("Password");


		try {
			Usuario u = BusinessDelegatorView.getUsuarioParametro(login, password).get(0);
  			codInmueble= action_darCodigo(u.getPersona().getPerCedula());
  		System.out.println("xxxxxx"+codInmueble);

			List<Autorizacion> autoEncontradas = BusinessDelegatorView.buscarPorNombre(codInmueble, txtNombCon);

			autorizacionEncontradas = new ArrayList<Autorizacion>();
			// autorizacionEncontradas = autoEncontradas;
			for (int i = 0; i < autoEncontradas.size(); i++) {
				Autorizacion au = new Autorizacion();
				au.setAutCedVisitante(autoEncontradas.get(i)
						.getAutCedVisitante());
				au.setAutCodigo(autoEncontradas.get(i).getAutCodigo());
				au.setAutDescripcionActi(autoEncontradas.get(i)
						.getAutDescripcionActi());
				au.setAutDescripcionPermi(autoEncontradas.get(i)
						.getAutDescripcionPermi());
				au.setAutEmpresa(autoEncontradas.get(i).getAutEmpresa());
				au.setAutFecha(autoEncontradas.get(i).getAutFecha());
				au.setAutNombreVisitante(autoEncontradas.get(i)
						.getAutNombreVisitante());
				au.setEstado(autoEncontradas.get(i).getEstado());
				au.setPropietarioInmueble(autoEncontradas.get(i)
						.getPropietarioInmueble());
				autorizacionEncontradas.add(au);
			}

		} catch (Exception e2) {
			FacesUtils.addErrorMessage(e2.getMessage());
		}
	}
	
	public void action_buscarPorCedula(ActionEvent e) {
		
		  String codInmueble="";
		  String txtNombCon = txtNombreConsulta.getValue().toString();
        String login = (String) FacesUtils.getSession().getAttribute("Login");
			String password = (String) FacesUtils.getSession().getAttribute("Password");


		try {
			Usuario u = BusinessDelegatorView.getUsuarioParametro(login, password).get(0);
			codInmueble= action_darCodigo(u.getPersona().getPerCedula());
		

			List<Autorizacion> autoEncontradas = BusinessDelegatorView.buscarPorCedula(codInmueble, txtNombCon);

			autorizacionEncontradas = new ArrayList<Autorizacion>();
			// autorizacionEncontradas = autoEncontradas;
			for (int i = 0; i < autoEncontradas.size(); i++) {
				Autorizacion au = new Autorizacion();
				au.setAutCedVisitante(autoEncontradas.get(i)
						.getAutCedVisitante());
				au.setAutCodigo(autoEncontradas.get(i).getAutCodigo());
				au.setAutDescripcionActi(autoEncontradas.get(i)
						.getAutDescripcionActi());
				au.setAutDescripcionPermi(autoEncontradas.get(i)
						.getAutDescripcionPermi());
				au.setAutEmpresa(autoEncontradas.get(i).getAutEmpresa());
				au.setAutFecha(autoEncontradas.get(i).getAutFecha());
				au.setAutNombreVisitante(autoEncontradas.get(i)
						.getAutNombreVisitante());
				au.setEstado(autoEncontradas.get(i).getEstado());
				au.setPropietarioInmueble(autoEncontradas.get(i)
						.getPropietarioInmueble());
				autorizacionEncontradas.add(au);
			}
			

		} catch (Exception e2) {
			FacesUtils.addErrorMessage(e2.getMessage());
		}
	}
	
	

	public void action_buscar(ActionEvent e) {
    	if (radioSelecionado.getValue().toString().equals("0")) {
				System.out.println("entre a radio 0");
				
				action_buscarPorCedula(e);
			} else if (radioSelecionado.getValue().toString().equals("1")){
				action_buscarPorNombre(e);
				System.out.println("entre a radio 1");
			}else  {
				FacesUtils.addErrorMessage("Seleccione un criterio para buscar");	
				
			}
		}
	
	
	public void action_buscarAll(ActionEvent e) {


		if (radioSelecionado.getValue().toString().equals("0")) {
			System.out.println("entre a radio 0");
			action_buscarPorCedulaAll(e);
		} else if (radioSelecionado.getValue().toString().equals("1")){
			action_buscarPorNombreAll(e);
			System.out.println("entre a radio 1");
		}else  {
			FacesUtils.addErrorMessage("Seleccione un criterio para buscar");	
			
		}
	}
	
	
	public void action_buscarPorNombreAll(ActionEvent e) {
		
		  String txtNombCon = txtNombreConsulta.getValue().toString().toUpperCase();

		try {

			List<Autorizacion> autoEncontradas = BusinessDelegatorView.buscarPorNombreAll(txtNombCon);

			autorizacionEncontradas = new ArrayList<Autorizacion>();
			// autorizacionEncontradas = autoEncontradas;
			for (int i = 0; i < autoEncontradas.size(); i++) {
				Autorizacion au = new Autorizacion();
				au.setAutCedVisitante(autoEncontradas.get(i)
						.getAutCedVisitante());
				au.setAutCodigo(autoEncontradas.get(i).getAutCodigo());
				au.setAutDescripcionActi(autoEncontradas.get(i)
						.getAutDescripcionActi());
				au.setAutDescripcionPermi(autoEncontradas.get(i)
						.getAutDescripcionPermi());
				au.setAutEmpresa(autoEncontradas.get(i).getAutEmpresa());
				au.setAutFecha(autoEncontradas.get(i).getAutFecha());
				au.setAutNombreVisitante(autoEncontradas.get(i)
						.getAutNombreVisitante());
				au.setEstado(autoEncontradas.get(i).getEstado());
				au.setPropietarioInmueble(autoEncontradas.get(i)
						.getPropietarioInmueble());
				autorizacionEncontradas.add(au);
			}

		} catch (Exception e2) {
			FacesUtils.addErrorMessage(e2.getMessage());
		}
	}
	
	public void action_buscarPorCedulaAll(ActionEvent e) {
		
		  String txtNombCon = txtNombreConsulta.getValue().toString();

		try {
			List<Autorizacion> autoEncontradas = BusinessDelegatorView.buscarPorCedulaAll(txtNombCon);

			autorizacionEncontradas = new ArrayList<Autorizacion>();
			// autorizacionEncontradas = autoEncontradas;
			for (int i = 0; i < autoEncontradas.size(); i++) {
				Autorizacion au = new Autorizacion();
				au.setAutCedVisitante(autoEncontradas.get(i)
						.getAutCedVisitante());
				au.setAutCodigo(autoEncontradas.get(i).getAutCodigo());
				au.setAutDescripcionActi(autoEncontradas.get(i)
						.getAutDescripcionActi());
				au.setAutDescripcionPermi(autoEncontradas.get(i)
						.getAutDescripcionPermi());
				au.setAutEmpresa(autoEncontradas.get(i).getAutEmpresa());
				au.setAutFecha(autoEncontradas.get(i).getAutFecha());
				au.setAutNombreVisitante(autoEncontradas.get(i)
						.getAutNombreVisitante());
				au.setEstado(autoEncontradas.get(i).getEstado());
				au.setPropietarioInmueble(autoEncontradas.get(i)
						.getPropietarioInmueble());
				autorizacionEncontradas.add(au);
			}
			

		} catch (Exception e2) {
			FacesUtils.addErrorMessage(e2.getMessage());
		}
	}

	
	
	
}
